// RAP [rh] quick access disabled
///*******************************************************************************
// * Copyright (c) 2007, 2010 IBM Corporation and others.
// * All rights reserved. This program and the accompanying materials
// * are made available under the terms of the Eclipse Public License v1.0
// * which accompanies this distribution, and is available at
// * http://www.eclipse.org/legal/epl-v10.html
// *
// * Contributors:
// *     IBM Corporation - initial API and implementation
// ******************************************************************************/
//
//package org.eclipse.ui.internal.quickaccess;
//
//import org.eclipse.swt.SWT;
//import org.eclipse.swt.custom.StyleRange;
//import org.eclipse.swt.graphics.Color;
//import org.eclipse.swt.graphics.Image;
//import org.eclipse.swt.graphics.Rectangle;
//import org.eclipse.swt.graphics.TextLayout;
//import org.eclipse.swt.graphics.TextStyle;
//import org.eclipse.swt.widgets.Event;
//import org.eclipse.swt.widgets.Table;
//import org.eclipse.swt.widgets.TableItem;
//
//import org.eclipse.jface.resource.DeviceResourceException;
//import org.eclipse.jface.resource.ImageDescriptor;
//import org.eclipse.jface.resource.ResourceManager;
//import org.eclipse.jface.viewers.StyledCellLabelProvider;
//import org.eclipse.jface.viewers.StyledString;
//
//import org.eclipse.ui.internal.IWorkbenchGraphicConstants;
//import org.eclipse.ui.internal.WorkbenchImages;
//import org.eclipse.ui.internal.WorkbenchPlugin;
//
//class QuickAccessEntry {
//	boolean firstInCategory;
//	boolean lastInCategory;
//	QuickAccessElement element;
//	QuickAccessProvider provider;
//	int[][] elementMatchRegions;
//	int[][] providerMatchRegions;
//
//	QuickAccessEntry(QuickAccessElement element, QuickAccessProvider provider,
//			int[][] elementMatchRegions, int[][] providerMatchRegions) {
//		this.element = element;
//		this.provider = provider;
//		this.elementMatchRegions = elementMatchRegions;
//		this.providerMatchRegions = providerMatchRegions;
//	}
//
//	Image getImage(QuickAccessElement element, ResourceManager resourceManager) {
//		Image image = findOrCreateImage(element.getImageDescriptor(),
//				resourceManager);
//		if (image == null) {
//			image = WorkbenchImages
//					.getImage(IWorkbenchGraphicConstants.IMG_OBJ_ELEMENT);
//		}
//		return image;
//	}
//
//	private Image findOrCreateImage(ImageDescriptor imageDescriptor,
//			ResourceManager resourceManager) {
//		if (imageDescriptor == null) {
//			return null;
//		}
//		Image image = (Image) resourceManager.find(imageDescriptor);
//		if (image == null) {
//			try {
//				image = resourceManager.createImage(imageDescriptor);
//			} catch (DeviceResourceException e) {
//				WorkbenchPlugin.log(e);
//			}
//		}
//		return image;
//	}
//
//	public void measure(Event event, TextLayout textLayout,
//			ResourceManager resourceManager, TextStyle boldStyle) {
//		Table table = ((TableItem) event.item).getParent();
//		textLayout.setFont(table.getFont());
//		event.width = 0;
//		switch (event.index) {
//		case 0:
//			if (firstInCategory || providerMatchRegions.length > 0) {
//				textLayout.setText(provider.getName());
//				if (boldStyle != null) {
//					for (int i = 0; i < providerMatchRegions.length; i++) {
//						int[] matchRegion = providerMatchRegions[i];
//						textLayout.setStyle(boldStyle, matchRegion[0],
//								matchRegion[1]);
//					}
//				}
//			} else {
//				textLayout.setText(""); //$NON-NLS-1$
//			}
//			break;
//		case 1:
//			Image image = getImage(element, resourceManager);
//			Rectangle imageRect = image.getBounds();
//			event.width += imageRect.width + 4;
//			event.height = Math.max(event.height, imageRect.height + 2);
//			textLayout.setText(element.getLabel());
//			if (boldStyle != null) {
//				for (int i = 0; i < elementMatchRegions.length; i++) {
//					int[] matchRegion = elementMatchRegions[i];
//					textLayout.setStyle(boldStyle, matchRegion[0], matchRegion[1]);
//				}
//			}
//			break;
//		}
//		Rectangle rect = textLayout.getBounds();
//		event.width += rect.width + 4;
//		event.height = Math.max(event.height, rect.height + 2);
//	}
//
//	public void paint(Event event, TextLayout textLayout,
//			ResourceManager resourceManager, TextStyle boldStyle, Color grayColor) {
//		final Table table = ((TableItem) event.item).getParent();
//		textLayout.setFont(table.getFont());
//		switch (event.index) {
//		case 0:
//			if (firstInCategory || providerMatchRegions.length > 0) {
//				textLayout.setText(provider.getName());
//				if (boldStyle != null) {
//					for (int i = 0; i < providerMatchRegions.length; i++) {
//						int[] matchRegion = providerMatchRegions[i];
//						textLayout.setStyle(boldStyle, matchRegion[0],
//								matchRegion[1]);
//					}
//				}
//				if (grayColor != null && providerMatchRegions.length > 0 && !firstInCategory) {
//					event.gc.setForeground(grayColor);
//				}
//				Rectangle availableBounds = ((TableItem) event.item).getTextBounds(event.index);
//				Rectangle requiredBounds = textLayout.getBounds();
//				textLayout.draw(event.gc, availableBounds.x + 1, availableBounds.y
//						+ (availableBounds.height - requiredBounds.height) / 2);
//			}
//			break;
//		case 1:
//			String label = element.getLabel();
//			if (element instanceof CommandElement) {
//				CommandElement commandElement = (CommandElement) element;
//				String binding = commandElement.getBinding();
//				if (binding != null) {
//					StyledString styledString = StyledCellLabelProvider.styleDecoratedString(label,
//							StyledString.QUALIFIER_STYLER, new StyledString(commandElement
//									.getCommand()));
//					StyleRange[] styleRanges = styledString.getStyleRanges();
//					for (int i = 0; i < styleRanges.length; i++) {
//						textLayout.setStyle(styleRanges[i], styleRanges[i].start,
//								styleRanges[i].start + styleRanges[i].length);
//					}
//				}
//			}
//			Image image = getImage(element, resourceManager);
//			event.gc.drawImage(image, event.x + 1, event.y + 1);
//			textLayout.setText(label);
//			if (boldStyle != null) {
//				for (int i = 0; i < elementMatchRegions.length; i++) {
//					int[] matchRegion = elementMatchRegions[i];
//					textLayout.setStyle(boldStyle, matchRegion[0], matchRegion[1]);
//				}
//			}
//			Rectangle availableBounds = ((TableItem) event.item).getTextBounds(event.index);
//			Rectangle requiredBounds = textLayout.getBounds();
//			textLayout.draw(event.gc, availableBounds.x + 1 + image.getBounds().width, availableBounds.y
//					+ (availableBounds.height - requiredBounds.height) / 2);
//			break;
//		}
//		if (lastInCategory) {
//			if (grayColor != null)
//				event.gc.setForeground(grayColor);
//			Rectangle bounds = ((TableItem)event.item).getBounds(event.index);
//			event.gc.drawLine(Math.max(0, bounds.x - 1), bounds.y + bounds.height - 1, bounds.x + bounds.width, bounds.y
//					+ bounds.height - 1);
//		}
//	}
//
//	/**
//	 * @param event
//	 */
//	public void erase(Event event) {
//		// We are only custom drawing the foreground.
//		event.detail &= ~SWT.FOREGROUND;
//	}
//}